package com.learn.proto;

import java.io.IOException;
import java.util.Arrays;

/**
 * @author Created by chenxin34 on 2019/2/23 上午10:00.
 */
public class DemoTest {
    public static void main(String[] args) {
        // 步骤1:通过 消息类的内部类Builder类 构造 消息类的消息构造器
        Demo.Person.Builder personBuilder = Demo.Person.newBuilder();

        // 步骤2:设置你想要设置的字段为你选择的值
        personBuilder.setName("Carson");
        personBuilder.setEmail("carson.ho@foxmail.com");
        personBuilder.setId(123);

        Demo.Person.PhoneNumber.Builder phoneNumberBuilder = Demo.Person.PhoneNumber.newBuilder();
        phoneNumberBuilder.setType(Demo.Person.PhoneType.HOME);
        phoneNumberBuilder.setNumber("0157-23443276");
        personBuilder.addPhone(0, phoneNumberBuilder);

        // 步骤3:通过 消息构造器 创建 消息类 对象
        Demo.Person person = personBuilder.build();

        // 步骤4:序列化和反序列化消息(两种方式)

        /*方式1：直接 序列化 和 反序列化 消息 */
        // a.序列化
        byte[] byteArray1 = person.toByteArray();
        // 把 person消息类对象 序列化为 byte[]字节数组
        System.out.println(Arrays.toString(byteArray1));
        // 查看序列化后的字节流

        // b.反序列化
        try {

            Demo.Person person_Request = Demo.Person.parseFrom(byteArray1);
            // 当接收到字节数组byte[] 反序列化为 person消息类对象

            System.out.println(person_Request.getName());
            System.out.println(person_Request.getId());
            System.out.println(person_Request.getEmail());
            System.out.println(person_Request.getPhone(0));
            // 输出反序列化后的消息
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
